#include "hi_gpio.h"
#include "hi_io.h"
#include "ssd1306/ssd1306.h"
#define OLED_I2C_BAUDRATE 400 * 1000
void Water_GPIO_Init(void)
{
    // 水流量计     引脚-GPIO4 SCL
    hi_io_set_func(HI_GPIO_IDX_4, HI_IO_FUNC_GPIO_4_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_4, HI_GPIO_DIR_IN);

    // 温度   引脚-GPIO12     A12
    hi_gpio_init();
    hi_io_set_func(HI_GPIO_IDX_12, HI_IO_FUNC_GPIO_12_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_12, HI_GPIO_DIR_IN);
    // hi_io_set_pull(HI_GPIO_IDX_12, HI_IO_PULL_DOWN); // 下拉

    // hi_io_set_pull(HI_GPIO_IDX_11, HI_IO_PULL_UP); // 上拉

    // TDS          引脚-GPIO9     A111  TX
    hi_io_set_func(HI_GPIO_IDX_9, HI_IO_FUNC_GPIO_9_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_9, HI_GPIO_DIR_IN);

    // 水压          引脚-GPIO5   A5
    hi_io_set_func(HI_GPIO_IDX_5, HI_IO_FUNC_GPIO_5_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_5, HI_GPIO_DIR_IN);

    // 电机   set7-MISO  dir8-MOSI
    hi_io_set_func(HI_GPIO_IDX_7, HI_IO_FUNC_GPIO_7_GPIO);
    hi_io_set_func(HI_GPIO_IDX_8, HI_IO_FUNC_GPIO_8_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_7, HI_GPIO_DIR_OUT);
    hi_gpio_set_dir(HI_GPIO_IDX_8, HI_GPIO_DIR_OUT);
    // 电机休眠控制引脚  GPIO14  高电平作用，低电平休眠
    hi_io_set_func(HI_GPIO_IDX_14, HI_IO_FUNC_GPIO_14_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_14, HI_GPIO_DIR_OUT);
    hi_gpio_set_ouput_val(HI_GPIO_IDX_14, 1);
    // 蜂鸣器
    hi_io_set_func(HI_GPIO_IDX_2, HI_IO_FUNC_GPIO_2_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_2, HI_GPIO_DIR_OUT);
    hi_gpio_set_ouput_val(HI_GPIO_IDX_2, 0);
    // 显示屏
    hi_io_set_func(HI_IO_NAME_GPIO_0, HI_IO_FUNC_GPIO_0_I2C1_SDA);
    hi_io_set_func(HI_IO_NAME_GPIO_1, HI_IO_FUNC_GPIO_1_I2C1_SCL);
    IoTI2cInit(1, OLED_I2C_BAUDRATE);
}

void Water_TCP_GPIO_Init(void)
{
    // 水流量计     引脚-GPIO4 SCL
    hi_io_set_func(HI_GPIO_IDX_4, HI_IO_FUNC_GPIO_4_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_4, HI_GPIO_DIR_IN);

    // 温度   引脚-GPIO12     A12
    hi_gpio_init();
    hi_io_set_func(HI_GPIO_IDX_12, HI_IO_FUNC_GPIO_12_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_12, HI_GPIO_DIR_IN);
    // hi_io_set_pull(HI_GPIO_IDX_12, HI_IO_PULL_DOWN); // 下拉

    // hi_io_set_pull(HI_GPIO_IDX_11, HI_IO_PULL_UP); // 上拉

    // TDS          引脚-GPIO9     A111  TX
    hi_io_set_func(HI_GPIO_IDX_9, HI_IO_FUNC_GPIO_9_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_9, HI_GPIO_DIR_IN);

    // 水压          引脚-GPIO5   A5
    hi_io_set_func(HI_GPIO_IDX_5, HI_IO_FUNC_GPIO_5_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_5, HI_GPIO_DIR_IN);

    // 电机   set7-MISO  dir8-MOSI
    hi_io_set_func(HI_GPIO_IDX_7, HI_IO_FUNC_GPIO_7_GPIO);
    hi_io_set_func(HI_GPIO_IDX_8, HI_IO_FUNC_GPIO_8_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_7, HI_GPIO_DIR_OUT);
    hi_gpio_set_dir(HI_GPIO_IDX_8, HI_GPIO_DIR_OUT);
    // 电机休眠控制引脚  GPIO14  高作用，低休眠
    hi_io_set_func(HI_GPIO_IDX_14, HI_IO_FUNC_GPIO_14_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_14, HI_GPIO_DIR_OUT);
    hi_gpio_set_ouput_val(HI_GPIO_IDX_14, 0);
}
void Water_Ssd1306_Init(void)
{

    usleep(20 * 1000);
    ssd1306_Init();
    ssd1306_Fill(Black);
    ssd1306_SetCursor(0, 0);
    ssd1306_DrawString("Hello WaterMeter!", Font_7x10, White);

    uint32_t start = HAL_GetTick();
    ssd1306_UpdateScreen();
    uint32_t end = HAL_GetTick();
    printf("ssd1306_UpdateScreen time cost: %d ms.\r\n", end - start);

    TestGetTick();
}
